{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 堆叠条形图"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1. 初始设置\n",
    "\n",
    "首先，导入所需的库，并设置中文字体和定义颜色等。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 导入所需的库\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    "from datetime import timedelta\n",
    "\n",
    "# 正常显示中文标签\n",
    "mpl.rcParams['font.sans-serif'] = ['SimHei']\n",
    "\n",
    "# 自动适应布局\n",
    "mpl.rcParams.update({'figure.autolayout': True})\n",
    "\n",
    "# 正常显示负号\n",
    "mpl.rcParams['axes.unicode_minus'] = False\n",
    "\n",
    "# 定义颜色，主色：蓝色，辅助色：灰色，互补色：橙色\n",
    "c = {'蓝色':'#00589F', '深蓝色':'#003867', '浅蓝色':'#5D9BCF',\n",
    "     '灰色':'#999999', '深灰色':'#666666', '浅灰色':'#CCCCCC',\n",
    "     '橙色':'#F68F00', '深橙色':'#A05D00', '浅橙色':'#FBC171'}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2. 读取数据\n",
    "\n",
    "其次，从 Excel 文件中读取随机模拟的数据，并定于画图用的数据。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 数据源路径\n",
    "filepath='./data/用户评分占比2.xlsx'\n",
    "\n",
    "# 读取 Excel文件\n",
    "df = pd.read_excel(filepath, index_col='功能')\n",
    "\n",
    "# 定义画图用的数据\n",
    "category_names = df.columns\n",
    "labels = df.index\n",
    "data = df.values\n",
    "data_cum = data.cumsum(axis=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3. 开始画图\n",
    "\n",
    "接下来，开始用「**面向对象**」的方法进行画图。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAoAAAAFgCAYAAAArYcg8AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8GearUAAAgAElEQVR4nOzdeXhU1f3H8ffNBmHfV5EdFHBBqFpXXHGnbtVYq2nVObVWm67aqtVWq1VbS62/6hmtpnWJVrHWUuuKilSxRQVRAQEBQfZ9mxCS3N8f504yGSbbJCQh9/N6nnlm5i7nnrn3JvOds3q+7yMiIiIi4ZHR3BkQERERkaalAFBEREQkZBQAioiIiISMAkARERGRkFEAKCIiIhIyCgBFREREQkYBoIiIiEjIKAAUERERCRkFgCIiIiIhowBQREREJGQUAIqIiIiEjAJAERERkZBRACgiIiISMgoARUREREJGAaCIiIhIyCgAFBEREQkZBYAiIiIiIaMAUERERCRkFACKiIiIhIwCQBEREZGQUQAoIiIiEjIKAEVERERCRgGgiIiISMgoABQREREJGQWAIiIiIiGjAFBEREQkZBQAioiIiISMAkARERGRkFEAKCIiIhIyCgBFREREQkYBoIiIiEjIZDV3BgSMMbnAmdbaZ5s7LyLNJfg7uAgottY+lbD8GGAY8LK1dlUjHi/DWlveWOmJiOxLFAA2M2NMFvAZsJ8x5jBr7YfNlI+fAvsDT1pr32nEdBcDi4HfW2v/nWYaFwJjgKi19ssU6wcADwFrrbWXNSS/LZEx5nygb5q7b7LWPtEIeTgROAF3Ld+01i5NI40f44K4udVskgM8CnwBPJWw/JtABDgaaHAAaIzpDfwTGG2M6Wet3dLQNEVE9jWhDgCNMa8BJzVCUt+y1hams6O1ttQY8wbuS+5bQLMEgMDJwCnA/4BGCwCBDkG6f0xnZ2NMG+AeYCAwwBhzZYpSmyxgIi7vyfuPxJUoLUvn+C3Ed3DXJx0fAHUOAI0xHu5v4iRr7c8SVo0HbgpeD61vJoJSvHuA240xP7bW3p9is63B87ak5durWZ4Wa+0aY8x+QDtcUPliY6QrIrIvCXUACBQHz68Be5Qs4aqj2gJTqPwSSnQa0DshnXQ9jAsAJzQwnYbYEDw39LMk2wL0Alanuf/NuODvKWvttwGMMZ2stVsTtoklPWOMaQtcC9wKfGmMOcZauzbNPDS3+DX5qrV2Zl12MMaMAeYCO+t5rDHAK4BnjHnWWvt+sLxj8LzMWvt5PdPEWjvDGHMVMBn4ozFmPK5U735c8F4M+MHmw40x8xN27xk8/8MYUwJk4koL11trxyUexxjTC7gN2AGUAKXVZGkrrlT1x8aYo5LWebj/je2AF9MtuRYRacnCHgDuDp5/Z619KXmlMeY0XAD441RVXsaYN3EB4K4G5uNtXAnPtHR2NsbMBboH+Sih8os00dXW2jdqSGZX0nPyMboAx+KCrOQg0cN9IW+y1n5QTbr1DiyNMccDPwMWAFcFyy4EosaYU6y1s4JN41/yvjGmBy6wuAbohwuC/pjO8euQv6dwPxKettZe3NjpJygLni8IAqe6iFcZl9W4VRJr7VxjzD+Ar+HO/QXBqvbB82f1SS8p7YeNMf8D/hXka3eQbicgG4iX7GbgSo7jcoLndsHr7OC5JMVhOuJK0mNB+tUFgABrgFHBI1Em0CZ4rAAUAIpIq6MAsInSMcZciwtKatuuptUnpWoDh/sC7YILcoqp/CIFFxi2BdbVduxaDANeqGWbJ4BLk5bFz01NX8R7MMYMB57BlSBOstbGS2CX4L6YnzDGjLXWJpZwjQWW44KDF4F8a+2r9TluPfKXiavaBjiliToU/Ggvpx93Jy4A/JoxZoC1djnQI1j3RUMSttbOMcYcgfux4APfiK8zxmTjgroF1toxCct/i/vsp1lrZ9eS/mIqA8b4/hm4HwVHpWojGvxo+CfwKnCvtXZzup9PRGRfEfYAsLG+sOtSytIFGNnA46Qq2cNaO7C6HYwxbwNHAYsaeOy1uJK0WPDIx1XNWlxw2Q74yBjTFfclHgsConie6xwABu3FnsaV5ky01i5IWP0x8NMgL5NxX+xxJbjqv6LEQNkY095au6POn7RuDge6Ba+7Be/rVD2bhszgOZ0q4Mzatk1mrf2vMeYlYAauKhWgT/C8or7ppUg/1Y8YcD9katI5zUNmAtcBBxpj/matnZq0/mzgSGCbgj8RCQsFgI0jZWCWJF4S9mtr7U01bpnEGLMC6E96Vc3Dgc+ttcXGmNtwQWhyKSHAMcHzdcaYC3Clhi9bax8CsNZ+gfsSjedpAi4AfDCxVMYYs4igk0BSaeZn1ZRu/sRa+9ukZWfhqm9LgGeC0rYcXJCZGNBcZYx5C3g5eP9JirQAXjTGbAWMtXZlqkyk4bQU7/dWAJgbPL9bSwlxKu3SOaC19vSkRfEq5XTbctblmBuCoWCS780bcB1QUlX5Vgg6/PwId38nN4dYhmvHe6Qx5sikXc8NnjcZY25PWJ5F5X3306R2pyIi+7SwB4DxL4cfGWNSteGKlzj81hiTqhPIAfU4Vr3aYjVGGkFpXG8qe/V+ldp7PZ+Q8Dqd0p6NuCranbjzOyh4/zlVq8r3w7X/SlWl+FfgB8D7uFKsRcBKXCnkhuAYHXA9ps+lMgDskJxQ0It4HC6ISnUN0xUPAP8AfD94f2sjpp/oAeD5NPfdVNsGxpjngpe7cCW1qe6zIcFzXooAKtEca+3vk9Lvhhve5UZr7ccJyy8BzscFbKUk/JCqLtANlmfhfqD41toLE1b3AS7H3XvVfY4rq8n3GuD44AGuXWsmrr1hO9y1VQAoIq2GAkCntiE2zm+EYzVGaWONaRhjzgamJVR3Hho8x4eWuRL3Jb/RWrsrad9C3Jfnubj2c+3SybO19vCkdD8FDgSOSRzE1xgzAzcExx4lctbaT4OevjWWeBpjjrLW/s8Yk4P7sh9njHkYSGwndgQu0HyjsUpwgjZj43H3z7243sZfMcZ0t9ZuqHHnNFhrpzR2mklOpbKTR22OCx7V+XOKZZcB5wCnGWN+gysFLwFGAOfVJ6NJqlTrW2vfwv3YEBGRWoQ9AIxPhXd6Nb2AV+NK0AbX0Av4+OTle1G1AZkx5mrg/4BXjTFnWWt344IfgFkAdR28N/hyrrG6rR66BM/JJVHx9nMpqxRrC/6Cbf4XPJcYY6LA1cAVKTaNATfWKbd1cyru3vnYWvtF0Av7kGB5UUMTN8YMxPVk3YnLe12aGNSkDa7ErK219uYU6wfirvcuoMxaW6XkzBhzCm5omM+ttSnHAEz4AbE0eZ21drIxZh7u/vwF7m/qO8DvcMPAFOPajJYFPe//DfzAWjs5SHt+kPdBwfv4EC1ta/rQxpihVFaf19c6a+2aNPcVEWnxFAA2nXo3xk/Bq2HdF7hg4VTgsaB67dhgXXwsN4wx7XE9PNdZa19phDzVpituIObkYVjiAeD6VDsFbbFqC9r+ZK29BsBa+11jzP/hgpnE61qOq5asruNBOuLVvzMSng8Jljc4AAQGALc0Qjqp7BEA1qHUMl4C/q8atom3EUw5RqC19mVjzMHAr4DfBsu2kcbgztbaUlx1bG0luk/hSmrTcRsuWBURaZXCHgA25eevsbSijqoNAK21/zLGTAKm4sam24wbWHpe0gDIf8cNX/IerlRnrwkG5W0LLEyxuisuOKtuGq54YPAvqlbpgmt7eX58myCojQe7L+3N4ViCmTJODd7+J+H5GmCiMcYLhjdpiPdwJac7cUHwLcCFiXNFBx11ngF+aa29tZY8x8e0q3f1aLBvvJq2pnaI8QCw2najwZA9P05K/89U/XHUP3i+xBgTb8LQF8gMShkT3RYM+1KdeCnyNcCnNWyX6Bxc+9OGju0pItKihT0AzKl9k0YTH+LiRmNMutWRNZZYWmtfC2Zb+CsQb0WfPLi0xQWARwTj6O3NqefiHQeWJC40xnSgcuDo6oKleIeR5621DyftfwEuAIxv0xtXbbjOWtsradtuQGkj9uAcGxwPqpYAxvMxFjf9WtqC6vstUKUzxEHGmMQhSg6KvzDGfAU3j3O880PyOd0dtI9LxzdxM3EsBt6oIcCtNQAM8poVlODFXUjlLCOJvhI8El2e9H5yTceicvDvVaSomq7G3poRR0SkRQl7ABhv+P7vWobXWJLG8BvJ4gPpbqCaas8aDMVdq1qvl7X2MWPMKNzQGbDnF9/zuCExBgLfxnVg2FviX+Dzk5bHq39r6qEaL8U7zxgzLGldfDzFeFu1+GDQVYIPY8yJwF+AD40x5ya3bUtTfHiUlfE2ldba5caY5biq29NoYABYjZqqIy+n5kHGZ+J6gNdLMDBzvMTuAWAScIcx5gZr7QtJ23UP3lY7zE5QmvhJsH+8NDMGlFtruwTbXAk8BHzdWvuMcVP67QT+Za09O9hmKnAmCVP/VSPejvW5GreqeV8RkVYp7AFgvIPCy6TujFDXuYDrYnDwfKu19v76ZDJhHMC6llguTXh9kzHm6WA2B4KG9k8B1+OG9PhR0Oljb4j3Fn07aXk8ANxYhzROpzLoqk68RGknVMwi8isgPrTPGlyP6Pf33LXe4u3/+hljUpWEnQbc0QjHSfZ/BJ15AuOpDPoSB8qeQuX56I7r4f5amsf8KS7YXoULAL+L69H9J2PMmwmlqr1xzRM2pGjrmegruB8z5wLxAHA3Vaum4/PyxoO7IUHan6RIr7Zq2vjfy4+peo5qcjruczZl7YCISJMLewDYL3j+kbV2jy8YU/e5gOsiPmZgOnOpLsIFoDV1AonnqRvwa1w14ELcUBuPGjd3bjxg+RtwCa6quD0NLO0wxhwInIhrG5dnrd1pjOkMnIErpUuufqxLCWDcVdVUAT+TYtv+xs1jexauuvy/uIC7UeZyDT5TfAy8JVSWPILrlToY+GowhE1jjxm3lKptIeMlylhr/2iM2YEbguVua+1/g/zeiAsAX6zvwYybczg+YPmNwTW9F/g6LpC7CRcgQh2rf3H3A8Dj1RwzI2Gbp4wx51PZJrBbqn1qEQ8s19Yhb3Hxe1LDyYhIqxbaANAY0wk3cKxP3dsHpXuswUC8bdrHNW2birV2Qj02vx9X8mNxw2x8hBv8+VrgviC9D4wxQ5LaYtWJMWY/XPuz+Jf+W1SdwisepObjgqIXrLXJ8xDXJwCsj0HB4y3grsYK/BKcjPub8YEjEj9X0OFldbD+ZNKrdqzJPbWsfxFXbX4V8N+gs0o+bm7kes1QEgxD80/cj5+p1tpHAay15caYHwHTgQuNMb8ISvzi90JtPa3Pwv2Qeb2a9WfjflD9Djd495+obD5wlTGm2Fp7XTX7phLvePXXeuyTvK+ISKsU2gAQ9wUDbuL5xp4nNlm82nB5I05FtgdjzPeAPFyV3c+stZuMMXcCvwR+Y4x5xVo7HyqG0qhP2n/AtTVLnI91N6535XTgXeA9a+2OYKDkeJu1VNXd9QkAa2oDmOxz4JxUpbmNJF4VPTs5qLXWrjXGzMFVNZ9O4weANwNvJryfgBuqJH781caYV4BvGWMewk0BOAxXelfnXslB+9GXcT+OFpDU8cJa+7Yx5jLgbwljNcbnCa42AAyu4UHAP1I1OQjaEf4qeBvFDfJ8LPAELmCcD1xrjFmVvG8NriLF7DABD3eOqiuRX16P44iI7HPCHADGp0SbUeNWjeOC4PnlGrdqAGPMpbhpycqBS6218eDqbtzgyLtIc17YwFpc8LcaeCF4TLPWVmmIHwzS+xguyPu3tfbVFGnVJwCsSxvAuFV7MfgDmBg8V3cdX8YFgBOrWd8Q8621FfeqMSYedJ1pjBlqrf0mLkg8GdfRJxvXk/jBuh4gGEaoENc2dgVugPQ92mlaax9LWrR/8FxTNWu8PeYeA64HvgEcDLxlrf3MuPmfv4+ryn8AN7zRcNy9dXQtn+MU3NAyr1trdxtjvg0cBjwT7w1tjPkP7kfg/knDJMXT+LoxxgLnBcPXiIi0Kk05EHKLEbQ1uih4+0INm2YkPVe3vtoSFmPMIVTOr5v8xdkojDEFuN6uGcBN1tqKoV+CKrpzgUOttTX1Tq1toOoiXBu//ay1xlr7rxTBX1tc+67TcOMQVtfDON72si6dQK6y1nqJD1w7tDozxtxijLk/KN1KizFmDG7+Yqh+/MT48gHGmNHpHqsaRxhjrjfGPGaMmU1lO7rxuKFnsNbOwnXu6YtrI/hIqgAumTGmizHmQVzg2AXX5vQYa+2SmveEIFA7M3ibsgQwKN2Lz8Gb6gcB1tpCXGAXHyKpfZCPBcDfg9LG06y1dWnLdwduWKB4oHgMrsPMwIRtnsW184v3lscYc3jw7OGGUZoIPB78vxARaVXCWgJ4Nq56bB01l8rFg6KK8xR0suiFq/YaGyzeTfV+hatummutnZ5uhqtjjLke+E3w9k/W2juTt6kl8Iu3h4zPmJDys1hrP6eaWR6CNA4AnsSdk1LcwMWLg3VdcOc8F1dadFmwW01TbWXXsK66HprVfVF/DVcy9x/qPiBwsng1/g4qB4BONiNY3z7YPu3SSGPMk7ges8ODRfHhWHbh2nW+i6sG/gfBzBpBAB7vbFQG/CAIRKO40rDEcQTjA2hfjevM0TNY/AZuCJbqZmg5AFeatxvXTu5YKuecrq5962W44GtpioGbK/62rLXvJLzeCnzTGLNffGDvhKrs+PXfY8BvY8xBuHv5bWvtm8HinSm2fwB3raYE+w0CZhpjPsR1aDof13byXOAu4CfVfDYRkX1S6ALAINiJDyD7QC1DoOQmPYMrXUn8otsFzK3mWN/BzSwAKabgaiS/x30B51DPMf2MMb/Hzcma2OA91awdNaXh4RrtX4u7n2K44C9x6JGtuJKdxLZ7xVRt05ZsjyAvCFg6U9l+Mx4Q7AxeHx7MLJHYTmwg7vxswXVsSIu19rcEgVYN25RQfZuz+ioFDsd9lqeAd4LHR0G15gW4AHAhMNsY8y3g57gfNvfieoJ/B7gOV9rlG2PeAE5JmCmlDDesS09ccHQ3rgS5pvESF+ICwOR2mG/jel2nMg83hE2qgLjG4VbiJX5B6dwluL+3Y3D3VKoSxx8Gz79JWBafVSZijOlO5fiR4IZCAleq7OEGDY8Pwn0mblaWi4wxd6fozCQiss8KXQCIG8ajA6768Xe1bHs/rlSpoq2atfYTY8xCXOnMu8CdNXwxHIkLTKZaa//R0IynYq0tMcZ8E8hMYwq0p4CC4PVu4F5rbb2GqbHW+saYp4FLcUHdBfFhSBK2KTfG/BVXGvox7kv1YWvtFzUk3T7FssNwHU7i5gXp7zTG/ArXZuzbKfbzcVOmpRrLsaW6DfittfajWrZrjyul+jPunj7PWvv3YN0dxpi7cVWZ5+N6ZFfcI0HzgCuMMauBF6211ZVskrBPmTHmJVxP89W4oG4G8Gh1nU2ste8EAVyqIZM6UHU4nep8gAvgewbH/GlyoJowIPVHuCrguNdwweOxVE4ZmMzHDWIdDyCx1i4O2hMuTWhTKyLSKni+39BpS/c9wXhu4xLbytVz/2HAGusms69t24NxU5TVp/dikwg6bPwIV4I5vSEBUlD1tqqGqsMOuBkfGtSgPmj/tgE3lmG0Pj1cW7NgzLwZ1tqaqtX3acHwNBtr+7szxmTWUoopIhJ6oQwARURERMJMvdtEREREQkYBoIiIiEjIKAAUERERCRkFgCIiIiIhowBQREREJGQUAIqIiIiEjAJAERERkZBRACgiIiISMgoARUREREJGAaCIiIhIyCgAFBEREQkZBYAiIiIiIaMAUERERCRkFACKiIiIhIwCQBEREZGQUQAoIiIiEjIKAEVERERCRgGgiIiISMgoABQREREJGQWAIiIiIiGjAFBEREQkZBQAioiIiISMAkARERGRkFEAKCIiIhIyCgBFREREQkYBoIiIiEjIKAAUERERCRkFgCIiIiIhowBQREREJGQUAIqIiIiEjAJAERERkZBRACgiIiISMgoARUREREJGAaCIiIhIyCgAbMFik712sclebnPnozWKTfZyYpO9js2dj9YmGo3mRKNRnddG5uUVZnp5hV2aOx+tkZdXmOPlFeqeldDJau4M7G1+aWy1l5Xbuw7brfGycvukc4zYZG8Y8FBugX9COvsnpHMlcATwA2AXsBj4JfBgQ9LdG/b2eY1N9jKA3wBXAGXAM8CPcgv84npn1qV3GvBt4Pu5Bf4q4F3gVeCGdNLbm0pLS1dnZWXVeG5LS0vXZGVl1fu8RqPRdsDvgfOBYuBR4JZIJFKeTl6j0WjFeY1EIi36vMZKSlfn5tR8XoPt1uTm1P/cxnl5hbcDNwKD/aL8pWmmMQb4HfB9vyh/PvA3YDdwcbr52pvqcm7TPa9eXuFSYGDS4rf8ovwJ9U0rSK/invWL8lv0PSuyN7X6ANDLyu0dm+zVul1ugV/rF0Oy2GQvGxgFPACU1D93VdJqD9wKzMgt8LcHywqBa2OTvYdzC/zShqTf2PbmeQ1cCVwHfB8XqPwJ2ATcVN+EgmDy10AMWBssjgK3xyZ7d+QW+FvTzONekZWV1Tsajda4TSQSSfe83glMAL4F9AL+D/gCeKi+CUWj0WrPazQavSMSibSo85qbk9XbyyusdTu/KD/dc4uXV9gHKEh3/wS3A0OBFcH7KPCCl1c4KN2gcm+qy7ltyHnFff5HE96ndW95eYXV3rNeXuEdflF+i7pnRfYmVQE3zI3AbOCrjZDW7YAHXJ2w7D5gEHB9I6S/r7kSeDy3wLe5Bf5fcCWAeWmmdS0wErg8t8AvC5b9FRe0/67BOd1HBAHbt4GbI5HIPyORyJ+Bl4Az0kyy4rxGIpHQntckN+P+jtPm5RVOAs4GLvOL8rcD+EX5LwOf4IKVMPrIL8qfmfD4NM10Ku5Zvyhf96yEmgLAhokCXwGmNiSR2GTvbNw/pityC/xN8eVBVeWvgF/EJnsnNeQY+6BhwJyE96uBfvVNJDbZGw/cBfwwt8BfHF+eW+DHgB8CV8Yme99sYF73FW1wPzCmJSzLIY2AJRqNVpzXSCRScV4jkUjFeY1Go2E5rwB4eYVDgauAPzQgjYHAn4G7/KL8d5JWfw84ycsrrHcpeCuwsaEJeHmFFfesX5Rfcc/6RfkV96yXVxiqe1bCTQFgA+QW+CtzC/xZwIZ004hN9r4KFAF35Bb4L6XY5Le4L+x/xiZ7Z6Z7nH3QWKpW+RwCLKtPArHJ3gjgn8Dfcgv8PUpOcgv8p3FVn4VB+8tWLRKJxCKRyOORSGR9NBrNjUajXwNOxp2jOotGoxXnNRKJ7HFeI5FIxXmNRqOt/rwmuA2YAbySzs5eXmEvXInsR7iSxCqCgPBm4DYvr/BWL6+wQSWN+5gJXl7hCi+vcLOXV/iQl1fYpj47e3mFFfesX5S/xz3rF+VX3LNeXmGY7lkJsVbfBrAli0328oCHgenAA7HJXlfAT7Hplbgg8Z+xyd6fAZNb4KfVaH9fkVvgVwR7scneMcCpwI/run9QYvoULmj8ZQ3n9mdAV+Ch2GRvEnBRboG/syF530c8BHwDeCqoCq6TaDRa5bxGo9Faz2s0Gp0EXBSJRFrtefXyCg8BLsI1B2mXxv5jgSm4c/kDoLOXV5jqb/xPQG/gFuBUL6/wXL8of03aGd93TACuAfrjSliX42pHauXlFVa5Z728wlrv2aAa/iK/KL/V3rMiCgCbSWyy1w7XE3Mmrqfvylp26YXrvflcaw/+EgU9rKfgSkHvq+M+GcB5uGrjr+N6U9fkEGApsCgkwR+4hvBzcR02pkcikQdq2yFoQ5jWeW3NwV/gTuAfflH+f728wglp7H867v/x8cCHQOcatj0bd167hyT4+wXwn3i1rZdXeApwCXUIAINOH2ndswr+pLVTANhMgkDjgthkry2uAXJbYAwwC+gc75kam+xdBtybW+CvAy5trvw2h9hkbzAu8FsCnJfQgaNGQYB8TTCGYjGQC3QA1gGH5Bb4HwXpHwe8BXyeW+D/ZC98hBYrEonMA+ZFo9GxuPZPtQaAwVAx10Sj0ZTnNRKJfAQQjUYrzmskEmn159XLKzwOmAgc6uUVZgGZwapML68wwy/Kr/UHm1+Uf4eXV/h7vyg/FvQkLsH1ev+mX5T/QnCc/XGlWEv9ovwGtTvel/hF+X9NWrQAd77rsm85cI2XV5jynvWL8j+Cimv4FvC5X5Tf6u9ZEVAA2OwSxrXbFZvsjQFWJQ1L0h83TEeoBIM0T8X9cp+YW+Bvq28aQUcPgOLYZO8IoBRYlLBJf2BTfNid1i4ajZ4B3A2Mj0Qi8ftuCXBOfdIJOnoAFEej0WrPayQSCcV5BU7Etaf+KGn5Ilzp/q11SSTojIBflF8cdAbpBMxP2KR/8Bya/wdeXuEQ3Pl9JCGQzgU21yed+LkFir28wmrv2Xiva5EwUCeQluVC4LWkZaEMAHHD4nQCTs8t8Lc0QnoXAu8mVfGG7dxuBkbjxq6MG4ar8krXhcC7SVW8YTuv8dEA4o/vBMvPIf1hWy4ElvtF+Z8lLOsPbAnZWHX74dqrDk9YNh74uAFpXgi8m1TFG7Z7VkQlgC1F0CHkdODIpFX9cQ2eQyM22euJ+xK9Bxgem+wl/vP/MLfA31XP9I4HIuw5jmDYzu1M4FPggWg0eiswApiEqwKut2g0qvMK+EX5K0low+vlFXYIXs4N1tWLl1d4IG6M0duTVoXqvAZm4krqol5e4R3AccBRwCnpJOblFeqeFQm0+gDQL42tqctsFMGUZU2RpSqC2URuxA3v8LPcAv9/CevaAofihpZoUfbyeR2NG5/uxuCRaDB1LLGKTfY8XCA5GTdV35SEdZnA4cAH9c3c3lZaWrqmtpk+gqng6pVuJBIpj0ajp+I60zyJKxG8EdeztM6i0WiV8xqJRKYkrGux5zVWUrqmLrNRBFOWNUWW9uDlFZ4PPAK8yZ7jCX6VhpXW7jV1ObfpnFe/KL/Eyys8EzdjzRRc270r/aL85JqSGgVD5lTcs35R/pSEdS32nhXZmzzfT9UbXppCbLI3Fvg7rofvtbkF/p8T1j2LK50pB8blFn2NZwcAACAASURBVPgNqfIIndhkbwDwb+AA4Je5Bf5tCet+hxtUNxtXxfxy8+Ry3xONRquc10gkclvCuirnNRKJ6LzWkZdX2Bk3Tt2xuLm/vxefqcLLK/w+bgDjNkDEL8qv97R9YeblFVa5Z/2i/NsS1lW5Z4MZV0RCQQFgM4tN9q4DpuYW+J8nLT8OV/r379wCf2GzZG4fF5vsXQ7MyS3wZyctH4Ob/uzl3AJ/TsqdpVrRaPRyYE4kEpmdtLzivEYiEZ3XevLyCs8BtvlF+W8kLe+Lm2Hkdb8o/z/Nkrl9nJdXeDkwxy/Kn520vOKe9Yvydc9KqCgAFBEREQmZVt8GMImiXREREQmTlNNGahgYERERkZBRACgiIiISMgoARUREREJGAaCIiIhIyCgAFBEREQkZBYAiIiIiIaMAUERERCRkFACKiIiIhIwCQBEREZGQUQAoIiIiEjKhCgD90uLmzgIAfmmsyY9ZWlra5MdsDrGScHxOkXTpb0READzfD9X0uH5scsop8ZpUboFPU+cjt8AnGo026TGbQyQSwcsrbO5siLRYflG+/kZEQsQvytdcwCIiIiKiAFBEREQkdBQAioiIiISMAkARERGRkFEAKCIiIhIyCgBFREREQkYBoIiIiEjIKAAUERERCRkFgCIiIiIhowBQREREJGQUAIqIiIiEjAJAERERkZBRACgiIiISMgoARUREREJGAaCIiIhIyCgAFBEREQkZBYAiIiIiIaMAUERERCRkFACKiIiIhEyTBoDGGK8pj9dQGfudQJtL59L26i1kn14E2R2gQ3/afPNjci58G7LbA+B1HEDmyIsb7bhtvr2E3AK/yiPngjea5Nh11alTJ84666wqyzIzMzn++OPJz8/n0ksvZezYsRXr2rdvzwUXXMA555xDVlZWxbKhQ4c2ab6lceTmZPLgFV9lXfRilt9/Ib+6cCxe8Ne95L4L8IvyqzzeuPk0APp3a8fH90zi7VtOp30bdx8M6N6ei48a3FwfRaTVuO3rY/GL8hnYo8Me6644YTh+UT7HH9gHgAzP47kfnsDS+y7goP27Vmz3k7PHNFl+pXk1OAA0xtxijPleHbYbBiwyxoxNWr7OGDMp4X3nhuapMXgd9yfnnBcoW/QsJS99g8z9jif7mN+QdeDllK+bA+UlZA45B4DMUfmUffF6ox6/dK6l+KkjKx67p323yY5dE8/z6NatGxMmTNhj3dFHH82AAQN46623+OCDDxg3bhwjRowAYMSIEWzcuJGysjIGDhwIwMiRI/nyyy+bLO/SeO68eBwTRvXhWw/O4JZnZ/OTs8ZwxQnDK9bb1xZw5M3/qnh895F3Abj8uGHMWbaJkrJyzhk3AID844fx+sermuVziLQWvTvnUnD6qJTr2mRncuv5h1ZZduTwnozs25kp/13G9049AICTD+rLZ6u27vW8SsvQGCWABwNfqcN29wGvW2s/TAoCdwJbjTFdjTH344LEfvXNhDHmLWPMW/XdrzpZYwso/3I6pTN/SfmSqZTOvo/MYRfgdRpI+Yo3KF/1Ll6ngZCRjdemK8TWNdahAShf9xH+6vcqHxvnNdmxa3LYYYdxwQUX0KdPnyrLs7OzGT58OLNmzWLJkiV8+umnLFq0iFGj3D+kDh06sHLlStauXUvHjh3JyMigTZs2FBcXN1nepXF4Hnx7wnBufuZDpn6wgkfeXMhLc77kjEP3q9jmoy828d6idRWPeV9uAWBgj/a88ekq3v1sLQN7diA7M4Ou7XNYt1X3gUhD3HzewVRXxXbtxAPo2j6nyrKBPdrz4dIN/HvOiooSw7MPG8A/31++l3MqLUVWbRsEpXs5QHmwKBuYY619JXi/E9heSxo3AP2A840xg4DXjTGnWGvfB3zgBuBA4EngEGvtyvp8CGNMO+DI+Gtr7c767J9KxqAzKJ19X8X70ll3U/rBvWSf8H/gl7sHGWQOO4+yRc819HB72rVxz2VeRtMcuwbz5s1j2bJljBs3juzs7Irl+++/P5mZmSxfXvnPY8WKFQwfPpx27drheR6+7+P7Pp7nMXjwYJYsWdKkeZfG0SYrk6sfeZdpn1SW2uVkZVBSWl7xfuOOXSn3zfA8ysuh3Hevzzt8IM/9d9lez7NIazakV0euOnEEv536CT//2sFV1nXKzeaGcw7iDy/Nq7IuI8Oj3Ifycve6f7d2rNoco9z3mzr70kzqUgI4ChiLC9IuAQ4BBhpj+hpjugKZQKYxpkvCo018Z2PMt4DbgceAc4FTgFlAkTGmY7DZ68Bwa+0NQGdjTNU7uHbHxvMBHFPPffeUmYPXZRiU76bNRe/Q9ns7yTnr75DZFn/Harwuw/A6D8XfuYaMfsdQvnJGgw+ZLGO/CbS9Yjltr95E9klRyMxpsmPXZOfOnaxfv36PkrvOnTtTWlrKjh07KpZt2bIFz/Po1KkTO3fupFOnThWv+/Tpw+rVq5s079I4ineX8cSMz9mwbRdtszOZNH5/Tj6oL//8oDL4n3BgH5bffyGbHr6E6FVHkZPl/tWs3hJjWJ+ODO3dkTVbYhwzshczFqxtro8i0irc9vWxzFiwllc+2rPs5PpzDmL9tl088ubCKstXb44xpFcHRvTtxJotMfKPH8ajby5qqixLC1BrAGit/a619pvAfOBJa+2lwKvASmAjkAcYYFPCwyQksRB4ExgCDMCV+FngU2AcUAastNbGiwyuAH5Xz89xIvA/XGB5Uj333VObbngZmWQdfhOlC55i9yvfImO/CWQf9WvKFj1L1iHXkjngJPxtX1C+8ZMGHy6VjP4TKHnjGnb/5+dkjsona/z1TXbsdOTm5lJSUlJlWfx9bm4uS5YsYcyYMfTr14/t27ezcWOKEk7Z5zwUOYrnf3QiU/67rMoXzIRRfbjm0Zn8/On3yT9uGNefcxAAz763jGsnHshJY/ryxfodfLJic3NlXaRVOHj/rlz01UHcUPT+Hut6d87l+6cdyM3PfEhpWdWSvXc+W0vPTm257/IjePrdJfTo2JY1W2JNlW1pAdJtA7gMaGet9YCngbustV7wfi2wIr6htXYGcC3wEPAyLkhbDBRYa98EngX+bIzZbIzZDFwF3FnP/JwETA8eJ6b5mSp4Ga5mvHzpvyibfR9lnz1N2aePknngZfjr5lD86GCK/zKCjAEnUv7l27S5fAFtLn4PcjrWknLdlL77C0r+cQbln79A2UcPUL5kKpkjL2mSY6fLT1Ft4AXdQn3fZ8OGDRQVFfH000/Tv39/Vq9ezde//nW+9rWvValKln3Lr//+Edc/OYsLDh/Ed04eCcAvnvmQM+56jRfeX84Dry5g6ofLueSoIQDMWbaRwdc9y4gfPMeJo/vy9vw1LLj3XN677Uw65uo+EKmvOy8exz9mLed/i9fvse4X5x/CvJVbeGbm0j3WxUrKOOT6Fxh43TO0zc5k6gfLmfrTk/jyT19n7KBuTZBzaW61tgFMxVrrA/GfCl2BDxNWdwXWJO3yHHBA0rKngDxr7fXA9enkAyCohh4L3AJ4wI+MMV2ttZvSTdPf7Zo0lq+bXbGsfOM8stp0grbdIba+YhiWzGHnUb5qJl6HfmQOmUTZ/MfTPWyFsnmPVXlfvmkBWQMnujd7+djpisVi5ORUbWQcfx+LuVuluLi4YgiYwYMHs3btWtq1a8egQYNYuLBq9YTsG+av3ML8lVsYO6g7PzxjNA++toDH3l5cZZsFK7cy8eD+Fe/Xb9tVMQTMeYcPZObCdfTr2o5J4wbw+IzPmzT/IvuyYw/ozcRD+nHoDS+QmeGRmeF+dGdmeAzp1ZErTxjOpN9O22Od54Hvu+YcqzbFOP7APjzz3lIG9ujA4zMWc82pB3Bl9J3m/GjSBBqjF/D+BCV+QZu+bFzVcKIS4FJccNgVuCtYhjFmsTHmG8FrzxhzRD2PPyF4nhk8EpelZ9dm/F1b8bJTlKqVu2rNzAMupWz+43gdBlD+5XQXiHUc0KDDAnidBpM5+gpI6M/lZeXCrsqqsr117IbYvHkzWVlZdOxYec66dOmC7/ts3Vo5rMDw4cNZuHAh7du3Z9WqVaxdu5b27ds3R5YlTacf2p+5d0+iTXZmxbIl67bRv1s7BvfqwBUnDK8YExDcmIGbd1ZtHnDpsUN5fMZiBnRvz/T5a5i5aB0Duus+EKmPE0f3JTMjg7l3f43SJy7n9ZtcQcHiP5zP6zdNJCcrk3/fcAqlT1zO4j+cD8DrN03kEVPZVP6Afp2Z9+UW9uvWntnLNvLKRyv1txgSDQoAg963Q4EFwaJ4uXFy6ZsPRIGlwaMgWAauh/HaYJzAN4BpxpgR9cjGSbjPsR5YF7xucDVw+ep3yeh3dMX7jG4H4O9cByXb3PseB+FvaPw2eF7H/cg55WG8rpVjqnm9x1O+4ePKvOylYzfE8uXLKS0tZb/9KocC6d+/P2vWrKkoAQTo1q0bmzalXTgrLcDmHSWMGdCVUf0rh+wc1rsTS9dtZ79u7Xk4cjTD+3SqWDd+SHc+Xl71mh80oIva/4k0UHTaAsbf+M+Kh3nYldqdfc9rHH3Li1XWnX3PawCYh9/h1mcra7cuO24oj81YnDJ9ad3qXQUcBGpjrLXP4wKtYiB+N1UXAAJ8I9gHY8ytwKBgeRlwK3A48BpwkLW2PvVAJwF/Ae4P3n+PRugIUjr7j+Sc/Q+yxl+Pv205maOvoPSjBwHI6Hd0Re9bf9sXZAw4Aa9dH8o+fbShh6V81UzKNy0k+6Qopf+7g4z+x5HZ72h2TTl5rx+7IUpLS1m4cCHjx4+nuLiY3Nxchg4dyltvVQ7N2Lt374qev9u3b6dfv360a9eOBQsWVJestEAzF63jkxWbeOCKr3Lrs7MZ0bcTk8YP4IeP/Y+ZC9excNVWolcdxR3Pf8RxB/Tm6JG9OfnXL1fsf3RCz98v1m/nhFF96NMll0ffUg9EkfpYtSnGqk2VP7A7tHHtaOd+sZmVm3ayclPliGjxsf4WrNzKsvWumVO7NllkZnhsi+3mi/XbGTuoG2u29OeL9TuQ1q/GEkBjTAdjzLnGmF8AI4DfADOAk4NNvg88ba0tDd53A3Ym9Oitq27AJGvt6fUJ/owxfXFtC1+w1s6y1s4C/gkcGKxLW/mSf7H7rQKyxn6f7JOjlC2ZSul7vwQgo98xlC2cAkDZvL+Q0XMsZOVS9vkLDTlkcODdlPzjTCgrIefMKWSOvISSV6+gfPnre//YDfTOO++wbNkyjj/+eA477DDef//9Km37+vTpUzH232effUaPHj3IzMxk2TKNA7cv8X049Y5XWbFhB09+7zgKTh/FjU9/wJ9enc/usnLOvPs1SkrLmfKDE7jk6CFcYf9TZaaPY0b2Zsp77pr/Zfpixg7qTm5OFi9oAFqRJnXymL48EbS7fXfhOhav2caFRwzi/lfmN3POpCnUVgKYAxThSuZuBaZZaxcBGGOuwo2/952E7buRuvQP4AljzO7gdVtcJ5C4q4MewRhjvKCTSV3ES/r+k7As/vpE4Ik6ppNS2Zz7KZtz/x7LS2fdVfHa37acXY+Nbshh9uBvXkjJ309NuW5vH7uuEkv24srKypg+fTrTp09Puc+cOXMqXu/YsYNnnnlmr+VP9q6Vm3ZyweQ3U65buHorp97xSsp1AHe9MLfi9fINOxj9k+cbO3siofTWvNV4eYUp1y1bv32PdYk/usrKfSb9dtpezJ20NDUGgNbajcaYntbabYnLjTHX4cbqu85au9gY0wvojhvkOdW8ZNlUrQK+HYg3FvOBxJmrjTHmSuArdQgETwI+t9ZW9Dq21q42xnwerGtQACgiIiLSGtXaBjAx+DPGZADPA2fgxvF7IFh1Dm6cP0g9pEvizCA/BC7DDQ0D8BbwnDEm3lihI3BnXUoBrbXfqmb50Nr2FREREQmrenUCsdaWG2N+APzRWvtqwqq/4YZ+mZlqHl9r7bCEt+8DdwN/DdblA/n1y7aIiIiIpKvevYCttYtxM3kkLttKZYlebfu/hSv1ExEREZFm0BgDQYuIiIjIPkQBoIiIiEjIKAAUERERCRkFgCIiIiIhowBQREREJGQUAIqIiIiEjAJAERERkZBRACgiIiISMgoARUREREJGAaCIiIhIyCgAFBEREQkZBYAiIiIiIaMAUERERCRkFACKiIiIhIwCQBEREZGQUQAoIiIiEjIKAEVERERCxvN9v7nz0GT80mLfy2rb3NnAL43hZeU26TFLS0vJyspq0mM2h1hJKbk5rf9ziqRLfyMioeOlXBimABAI1YcVERGR0EsZAKoKWERERCRkFACKiIiIhIwCQBEREZGQUQAoIiIiEjIKAEVERERCRgGgiIiISMgoABQREREJGQWAIiIiIiGjAFBEREQkZBQAioiIiISMAkARERGRkFEAKCIiIhIyCgBFREREQkYBoIiIiEjIKAAUERERCRkFgCIiIiIhowBQREREJGQUAIqIiIiEjAJAERERkZBRACgiIiISMgoARUREREJGAaCIiIhIyCgAFBEREQmZUAWAfmlxc2dBquGXxpo7C7KXlZaWNncWpBqxEl0bqUr3ROvn+b7f3HloSn5sstfceZAUcgt8dG1at9wCn2g02tzZkBQikQheXmFzZ0NaEL8oX/dEK+EX5af8cg1VCaCIiIiIKAAUERERCR0FgCIiIiIhowBQREREJGQUAIqIiIiEjAJAERERkZBRACgiIiISMgoARUREREJGAaCIiIhIyCgAFBEREQkZBYAiIiIiIaMAUERERCRkFACKiIiIhIwCQBEREZGQUQAoIiIiEjIKAEVERERCRgGgiIiISMgoABQREREJGQWAIiIiIiHTpAGgMcZryuPty7zOQ8k5f1rVhW06k33qo7T9zgba5C8i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\n",
      "text/plain": [
       "<Figure size 648x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 使用「面向对象」的方法画图，定义图片的大小\n",
    "fig, ax=plt.subplots(figsize=(9, 5))\n",
    "\n",
    "# 设置标题\n",
    "ax.set_title('\\n用户对功能 A 最为满意\\n\\n', fontsize=26, loc='left', color=c['深灰色'])\n",
    "\n",
    "# 倒转 Y 轴，让第一个功能排在最上面\n",
    "ax.invert_yaxis()\n",
    "\n",
    "# 隐藏 X 轴\n",
    "ax.xaxis.set_visible(False)\n",
    "# 设置 X 轴的范围\n",
    "ax.set_xlim(0, np.sum(data, axis=1).max())\n",
    "\n",
    "# 定义颜色\n",
    "category_colors = [c['橙色'], c['橙色'], c['灰色'], c['蓝色'], c['蓝色']]\n",
    "\n",
    "# 画堆叠水平条形图\n",
    "for i, (colname, color) in enumerate(zip(category_names, category_colors)):\n",
    "    widths = data[:, i]\n",
    "    starts = data_cum[:, i] - widths\n",
    "    ax.barh(labels, widths, left=starts, height=0.68, label=colname, color=color, edgecolor='w')\n",
    "    xcenters = starts + widths / 2\n",
    "\n",
    "    # 设置数据标签及其文字颜色\n",
    "    text_color = 'w'\n",
    "    for y, (x, d) in enumerate(zip(xcenters, widths)):\n",
    "        ax.text(x, y, '{:.0%}'.format(d), ha='center', va='center', color=text_color, fontsize=16)\n",
    "        \n",
    "# 显示图例\n",
    "l = ax.legend(ncol=len(category_names), bbox_to_anchor=(-0.03, 0.95),loc='lower left', \n",
    "              fontsize=16, frameon=False, handlelength=0.6)\n",
    "\n",
    "#设置图例中文本的颜色\n",
    "for i, text in zip(np.arange(len(l.get_texts())), l.get_texts()):\n",
    "    if i < 2:\n",
    "        text.set_color(c['橙色'])\n",
    "    elif i < 3:\n",
    "        text.set_color(c['灰色'])\n",
    "    else:\n",
    "        text.set_color(c['蓝色'])\n",
    "\n",
    "# 隐藏边框\n",
    "ax.spines['top'].set_visible(False)\n",
    "ax.spines['right'].set_visible(False)\n",
    "ax.spines['left'].set_visible(False)\n",
    "ax.spines['bottom'].set_visible(False)\n",
    "\n",
    "# 隐藏 Y 轴的刻度线\n",
    "ax.tick_params(axis='y', which='major', length=0)\n",
    "\n",
    "# 设置坐标标签字体大小和颜色\n",
    "ax.tick_params(labelsize=16, colors=c['深灰色'])\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    " "
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
